package neg;

import static org.junit.Assert.*;

import java.util.ArrayList;

import org.junit.Test;

public class RepartoTest {
	@Test
	public void caminoMinimo() {
		Cliente pepe = new Cliente("Pepe", new Ubicacion(1, 1));
		Cliente Julian = new Cliente("Julian", new Ubicacion(2, 4));
		Cliente Raul = new Cliente("Raul", new Ubicacion(3, 3));
		Cliente Roberto = new Cliente("Roberto", new Ubicacion(2, 1));

		Pedido pedidoPepe = new Pedido("12/12/12", pepe);
		Pedido pedidoJulian = new Pedido("12/12/12", Julian);
		Pedido pedidoRaul = new Pedido("12/12/12", Raul);
		Pedido pedidoRoberto = new Pedido("12/12/12", Roberto);

		Reparto actual = new Reparto(new Ubicacion(0, 1));

		actual.agregarPedido(pedidoRoberto);
		actual.agregarPedido(pedidoRaul);
		actual.agregarPedido(pedidoPepe);
		actual.agregarPedido(pedidoJulian);

		actual.actualizarCaminoMinimo();

		double distanciaEsperada = 9.255832815336873;
		double distanciaDelCaminoMinimo = actual.distanciaDelCaminoMinimo();

		assertTrue(distanciaEsperada == distanciaDelCaminoMinimo);
	}

	@Test
	public void caminoMinimo2() {
		Cliente pepe = new Cliente("Pepe", new Ubicacion(1, 1));
		Cliente Julian = new Cliente("Julian", new Ubicacion(2, 4));
		Cliente Raul = new Cliente("Raul", new Ubicacion(3, 3));
		Cliente Roberto = new Cliente("Roberto", new Ubicacion(2, 1));

		Pedido pedidoPepe = new Pedido("12/12/12", pepe);
		Pedido pedidoJulian = new Pedido("12/12/12", Julian);
		Pedido pedidoRaul = new Pedido("12/12/12", Raul);
		Pedido pedidoRoberto = new Pedido("12/12/12", Roberto);

		ArrayList<Pedido> lista = new ArrayList<Pedido>();

		lista.add(pedidoRoberto);
		lista.add(pedidoRaul);
		lista.add(pedidoJulian);
		lista.add(pedidoPepe);

		Reparto actual = new Reparto(new Ubicacion(0, 1), lista);
		double distanciaEsperada = 9.255832815336873;
		double distanciaDelCaminoMinimo = actual.distanciaDelCaminoMinimo();
		assertTrue(8 < distanciaDelCaminoMinimo);
		assertTrue(distanciaEsperada == distanciaDelCaminoMinimo);

	}

	@Test
	public void caminoMinimo3() {
		Ubicacion ubicacionGeneral = new Ubicacion(1, 1);
		Cliente pepe = new Cliente("Pepe", ubicacionGeneral);
		Cliente Julian = new Cliente("Julian", ubicacionGeneral);
		Cliente Raul = new Cliente("Raul", ubicacionGeneral);
		Cliente Roberto = new Cliente("Roberto", ubicacionGeneral);

		Pedido pedidoPepe = new Pedido("12/12/12", pepe);
		Pedido pedidoJulian = new Pedido("12/12/12", Julian);
		Pedido pedidoRaul = new Pedido("12/12/12", Raul);
		Pedido pedidoRoberto = new Pedido("12/12/12", Roberto);

		ArrayList<Pedido> lista = new ArrayList<Pedido>();

		lista.add(pedidoRoberto);
		lista.add(pedidoRaul);
		lista.add(pedidoJulian);
		lista.add(pedidoPepe);

		Reparto actual = new Reparto(ubicacionGeneral, lista);
		double distanciaEsperada = 0;

		double distanciaDelCaminoMinimo = actual.distanciaDelCaminoMinimo();

		assertTrue(distanciaEsperada == distanciaDelCaminoMinimo);

	}

	@Test
	public void caminoMinimo4() {
		Ubicacion ubicacionGeneral = new Ubicacion(1, 1);
		Cliente pepe = new Cliente("Pepe", ubicacionGeneral);
		Cliente Julian = new Cliente("Julian", new Ubicacion(1, 1.5));

		Pedido pedidoPepe = new Pedido("12/12/12", pepe);
		Pedido pedidoJulian = new Pedido("12/12/12", Julian);

		ArrayList<Pedido> lista = new ArrayList<Pedido>();

		lista.add(pedidoJulian);
		lista.add(pedidoPepe);

		Reparto actual = new Reparto(ubicacionGeneral, lista);
		double distanciaEsperada = 0.5;

		double distanciaDelCaminoMinimo = actual.distanciaDelCaminoMinimo();

		assertTrue(distanciaEsperada == distanciaDelCaminoMinimo);
	}

	@Test
	public void caminoMinimo5() {
		Cliente pepe = new Cliente("Pepe", new Ubicacion(1, 1));
		Cliente Julian = new Cliente("Julian", new Ubicacion(1, 1.5));

		Pedido pedidoPepe = new Pedido("12/12/12", pepe);
		Pedido pedidoJulian = new Pedido("12/12/12", Julian);

		ArrayList<Pedido> lista = new ArrayList<Pedido>();

		lista.add(pedidoJulian);
		lista.add(pedidoPepe);

		Reparto actual = new Reparto(new Ubicacion(1.5, 1), lista);
		double distanciaEsperada = 1;

		double distanciaDelCaminoMinimo = actual.distanciaDelCaminoMinimo();
		assertTrue(distanciaEsperada == distanciaDelCaminoMinimo);

	}
}
